package com.shaoxi.ext.framework;

import com.shaoxi.ext.framework.exception.RegisterExtException;
import com.shaoxi.ext.framework.exception.NotExtFoundException;

/**
 * 扩展点管理
 */
public interface ExtManager {
    /**
     * 注册扩展点，一个扩展点可以支持多个业务，但是同一个扩展点，同一个业务只能有一个实现
     *
     * @param iBusinessExt
     */
    void register(String bizCode, IBusinessExt iBusinessExt) throws RegisterExtException;

    /**
     * 根据业务code获取扩展点实现，如果业务没有实现，则使用默认实现。
     *
     * @param bizCode
     * @param cls
     * @return
     * @param <T>
     * @throws NotExtFoundException 找不到任何扩展实现
     */
    <T> T getExt(String bizCode, Class<T> cls) throws NotExtFoundException;
}
